
#include "../types.h"


#define MAX_CODE_ADDR(A,B) ((0x8577FF4)+(((((A)-0x81)*0x80)+((B)-0x80))*0x54))

typedef struct{
		int*				point;
		unsigned short	code;
}fe_font;

extern	fe_font		fonts[];

/*

codeA codeB

codeB :0x80 - 0xff
codeA :0x81 - 0x98


((codeA - 0x81) * 0x80 + (codeB - 0x80)) * 54



*/




u32		text_font(u8*text,u32 a2){
	s32		offset;
	offset	=	a2	-	0x8577FF4;		//汉化的ROM是两个字体相连的,
	//0x8577FF4是正常的显示字体
	if(offset==0){
		/*非方框字已经绘制好了*/
		u32		codeA;
		u32		codeB;
		codeA	=	text[0];
		codeB	=	text[1];
		if(codeA<0x81||codeB<0x80){
			codeA	=	0x83;
			codeB	=	0x9B;
		}

		if(codeA<=0x98){
			codeA		-=	0x81;
			codeA		*=	0x80;
			codeB		-=	0x80;
			codeB		+=	codeA;		//偏移字数
			codeB		*=	0x54;		//字体大小
			return a2	+	codeB;
		}


		codeA	=	text[0];
		codeB	=	text[1];
		codeA	-=	0x81;
		codeA	*=	0x80;
		codeA	+=	(codeB-0x80);
		if(!fonts[codeA].point){
			codeA	=	0x83;
			codeB	=	0x9B;
			codeA		-=	0x81;
			codeA		*=	0x80;
			codeB		-=	0x80;
			codeB		+=	codeA;		//偏移字数
			codeB		*=	0x54;		//字体大小
			return a2	+	codeB;
		}
		else{
			return (u32)fonts[codeA].point;
		}
	}
	else{
		/*这是其他字体*/
		u32		codeA;
		u32		codeB;
		s32		code;

//		u8		gbA;
//		u8		gbB;
		if(text[0]<=0x98){
			/*rom里面的编码,直接读取*/
			codeA		=	text[0];
			codeB		=	text[1];
		}
		else
		{
			/*gb2312对应的方框字,如果没有对应的编码,则用问号*/
			codeA		=	text[0];
			codeB		=	text[1];
			code		=	codeA-0x81;
			code		*=	0x80;
			code		+=	codeB;
			if(fonts[code].code){
				u8*			pp;
				pp			=	(u8*)&fonts[code].code;
				codeA	=	pp[0];
				codeB	=	pp[1];
			}
			else{
				codeA	=	0x83;
				codeB	=	0x9B;
			}
		}

		if((codeA<0x81||codeA>0x98)||codeB<0x80){
			codeA	=	0x83;
			codeB	=	0x9B;
		}

		codeA		-=	0x81;
		codeA		*=	0x80;
		codeB		-=	0x80;
		codeB		+=	codeA;		//偏移字数
		codeB		*=	0x54;		//字体大小
		return a2	+	codeB;
	}
}
